package com.mazaiting.redeye.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

import java.util.concurrent.TimeUnit;

/***
 *
 *
 *                                                    __----~~~~~~~~~~~------___
 *                                   .  .   ~~//====......          __--~ ~~
 *                   -.            \_|//     |||\\  ~~~~~~::::... /~
 *                ___-==_       _-~o~  \/    |||  \\            _/~~-
 *        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
 *    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
 *  .~       .~       |   \\ -_    /  /-   /   ||      \   /
 * /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
 * |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
 *          '         ~-|      /|    |-~\~~       __--~~
 *                      |-~~-_/ |    |   ~\_   _-~            /\
 *                           /  \     \__   \/~                \__
 *                       _--~ _/ | .-~~____--~-/                  ~~==.
 *                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
 *                                 -_     ~\      ~~---l__i__i__i--~~_/
 *                                 _-~-__   ~)  \--______________--~~
 *                               //.-~~~-~_--~- |-------~~~~~~~~
 *                                      //.-~~~--\
 *                               神兽保佑
 *                              代码无BUG!
 * @author mazaiting
 * @date 2019-06-26
 * @decription 内存数据库服务
 */
@Service
public class RedisService {
    /**
     * Redis 字符串模板
     */
    private final StringRedisTemplate mStringRedisTemplate;

    @Autowired
    public RedisService(StringRedisTemplate stringRedisTemplate) {
        this.mStringRedisTemplate = stringRedisTemplate;
    }

    /**
     * 读取缓存
     * @param key 键
     * @return 字符串
     */
    public String get(final String key) {
        return mStringRedisTemplate.opsForValue().get(key);
    }

    /**
     * 写入缓存
     *
     * @param key   键
     * @param value 值
     */
    public void set(final String key, final String value) {
        mStringRedisTemplate.opsForValue().set(key, value);
    }

    /**
     * 写入缓存
     *
     * @param key   键
     * @param value 值
     * @param time 有效时间
     */
    public void set(final String key, final String value, final long time) {
        mStringRedisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
    }

    /**
     * 检测是否有该 KEY
     * @param key key
     * @return true: 存在; false: 不存在
     */
    @SuppressWarnings("ConstantConditions")
    public boolean hasKey(String key) {
        return mStringRedisTemplate.hasKey(key);
    }

    /**
     * 删除缓存
     * @param key 键
     */
    public void delete(final String key) {
        mStringRedisTemplate.delete(key);
    }

    /**
     * 设置有效时间
     * @param key 键
     * @param time 时间
     */
    public void setExpireTime(String key, int time) {
        mStringRedisTemplate.expire(key, time, TimeUnit.SECONDS);
    }
}
